#include <stdio.h>
#include <stdlib.h>
#include "cjson/cJSON.h"

// 写入 JSON 到文件
void write_json_to_file(const char* filename, cJSON* json_obj) {
    char* json_str = cJSON_Print(json_obj); // 格式化 JSON 字符串
    if (!json_str) {
        fprintf(stderr, "Failed to print JSON\n");
        return;
    }

    FILE* fp = fopen(filename, "w");
    if (fp) {
        fputs(json_str, fp);
        fclose(fp);
        printf("✅ JSON written to %s\n", filename);
    } else {
        fprintf(stderr, "❌ Error: could not open %s for writing\n", filename);
    }

    free(json_str);
    cJSON_Delete(json_obj);
}

int main() {
    // 创建一个 JSON 对象并添加一些测试字段
    cJSON* root = cJSON_CreateObject();
    cJSON_AddStringToObject(root, "tensor_name", "dst");
    cJSON_AddNumberToObject(root, "offset", 0);
    cJSON_AddNumberToObject(root, "length", 128);

    cJSON* dims = cJSON_CreateIntArray((const int[]){4096, 1, 1, 1}, 4);
    cJSON_AddItemToObject(root, "dimensions", dims);

    cJSON* strides = cJSON_CreateIntArray((const int[]){4, 16384, 16384, 16384}, 4);
    cJSON_AddItemToObject(root, "strides", strides);

    cJSON_AddNumberToObject(root, "data_type", 0);
    cJSON_AddNumberToObject(root, "type_size", 4);

    // 添加一个十六进制数组作为示例数据
    cJSON *array = cJSON_CreateArray();
    for (int i = 0; i < 64; ++i) {
      cJSON_AddItemToArray(array, cJSON_CreateNumber(i));
    }
    cJSON_AddItemToObject(root, "raw_data", array);

    // 写入到文件
    write_json_to_file("data.json", root);

    cJSON* hex_data = cJSON_CreateArray();
    for (int i = 0; i < 64; i++) {
      char byte_str[4];
      snprintf(byte_str, sizeof(byte_str), "%02x", i);  // "00", "01", ..., "3f"
      cJSON_AddItemToArray(hex_data, cJSON_CreateString(byte_str));
    }
    write_json_to_file("hex_str.json", hex_data);

    return 0;
}
